﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HomeWork
{
    public class MimicStack<T> 
    {
       
        //public int Stored { get; private set; }// 存储的元素数量        
        //public int Empty { get; private set; }// 空栈的元素数量

        // 计算属性：当前存储的元素数量
        public int Stored => _top;
        // 计算属性：剩余空位数量
        public int Empty => _capacity - _top;

        private T[] _items; /*{ get; private set; } *///数组
        private int _top; // 栈顶元素的索引
        private readonly int _capacity;// 栈底元素的索引

        public MimicStack(int capacity)
        {
            if (capacity <= 0)
                throw new ArgumentException("栈容量必须大于0", nameof(capacity));

            _items = new T[capacity];
            _capacity = capacity;
            _top = 0; // 初始时栈顶指向0位置（空栈）
        }

        public void Push(T value)
        {
            //if (top >= depth.Length)
            //{
            //    Console.WriteLine("栈已满");
            //    return;                
            //}//else nothing

            //depth[top] = value;

            //top++; // 更新栈顶索引
            //Stored++;// 更新存储的元素数量
            //Empty--; // 更新空栈的元素数量
            if (_top >= _capacity)
            {
                throw new InvalidOperationException("栈已满，无法添加元素");
            }

            _items[_top] = value;
            _top++;
        }

        public T Pop()
        {

            if (_top == 0 )
            {
                throw new InvalidOperationException("栈已空，无法弹出元素");
            }//eles nothing

            _top--; // 移动到最后一个有效元素
            T value = _items[_top];
            _items[_top] = default!; // 清空位置（使用default初始化）
            return value;
        }
    }
}
